<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      /* 动物类 */
      function Animal(type, food) {
        // this=正在构建的dog对象
        this.type = type;
        this.food = food;
      }

      /* 在原型对象 */
      Animal.prototype.eat = function () {
        // eat中的this即调用的主语dog
        console.log(`一只${this.type}正在享用${this.food}`);
      };

      //   // 构造函数内部的this就是构造出来的dog
        const dog = new Animal("狗狗", "大骨棒");
      //   // 实例的eat方法其实是其原型中的eat方法的引用
      //   // console.log(dog.eat===dog.__proto__.eat);
      //   dog.eat(); //eat中的this即调用的主语dog
      //   console.log("dog.toString()=", dog.toString());
      //   console.log(dog);
    </script>

    <script>
      function Person(name, age) {
        // 张三丰首先是一只动物
        /* 继承父类属性 */
        // Animal("人", "大米饭")//如果这样调用 this=window
        Animal.call(this, "人", "大米饭");
        // this.type = type;
        // this.food = food;

        this.name = name;
        this.age = age;
      }
      /* 继承父类Animal的所有方法：绑一只Animal实例给Person当原型 */
      Person.prototype = new Animal()
      Person.prototype.think = function () {
        console.log(`${this.name}正在使用它的大脑`);
      };
      const zsf = new Person("张三丰", 60);
      zsf.eat()
      zsf.think();
    </script>
  </body>
</html>
